package com.topten.beans;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import com.topten.exceptions.NegocioException;
import com.topten.basicas.comum.Situacao;
import com.topten.basicas.organizacional.Departamento;
import com.topten.basicas.organizacional.Funcionario;
import com.topten.basicas.organizacional.Gestor;
import com.topten.negocio.Fachada;
import com.topten.negocio.IFachada;

@ManagedBean
public class DepartamentoBean {
		private IFachada fachada=Fachada.getInstancia();
		public IFachada getFachada() {
			return fachada;
		}
		public void setFachada(IFachada fachada) {
			this.fachada = fachada;
		}
		public void setSituacao(Situacao[] situacao) {
			this.situacao = situacao;
		}
		private Departamento departamento = new Departamento();
		private Situacao[] situacao;  
		private Integer idDepartamentoSuperiorSelecionado;
		private Integer idGestorSelecionado;
		
		
		public List<Gestor> getListarGestor(){
			return Fachada.getInstancia().listarGestores();
		}
		public List<Departamento> getListarTodosDepartamentos(){
			return Fachada.getInstancia().listarTodosDepartamentos();
		}
		
		public Integer getIdDepartamentoSuperiorSelecionado() {
			return idDepartamentoSuperiorSelecionado;
		}

		public void setIdDepartamentoSuperiorSelecionado(
				Integer idDepartamentoSuperiorSelecionado) {
			this.idDepartamentoSuperiorSelecionado = idDepartamentoSuperiorSelecionado;
		}

		public Integer getIdGestorSelecionado() {
			return idGestorSelecionado;
		}

		public void setIdGestorSelecionado(Integer idGestorSelecionado) {
			this.idGestorSelecionado = idGestorSelecionado;
		}

		public Situacao[] getSituacao() {
			return Situacao.values();
		}


		public Departamento getDepartamento() {
			return departamento;
		}

		public void setDepartamento(Departamento departamento) {
			this.departamento = departamento;
		}


		public String inserirDepartamento() throws NegocioException{
			
			try{
			departamento.setGestor(fachada.buscarGestorPorID(this.getIdGestorSelecionado()));
			departamento.setDepartamentoSuperior(fachada.buscarDepartamentoPorId(this.getIdDepartamentoSuperiorSelecionado()));
		
			
				if (departamento.getCodigo() == null
						|| departamento.getCodigo() == 0) {
					departamento.setCodigo(null);
					departamento.setSituacao(Situacao.ATIVO);
					fachada.inserirDepartamento(departamento);
					return "departamento-listar.xhtml";
					
					
				} else {

					fachada.alterarDepartamento(departamento);
					return "departamento-listar.xhtml";
				}
			} catch (NegocioException e) {
				FacesContext.getCurrentInstance().addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_WARN, e.getMessage(), null));
				e.printStackTrace();
				return null;
			}

			

		}
		
		public String alterarDepartamento(Departamento deptParam){
			
			
			
			if(deptParam.getDepartamentoSuperior() == null & deptParam.getGestor()== null){
				this.departamento = deptParam;
				return "departamento-salvar.xhtml";
				
			}else
			if(deptParam.getDepartamentoSuperior() == null){		
				this.departamento = deptParam;
				this.idGestorSelecionado = deptParam.getGestor().getCodigo();
				return "departamento-salvar.xhtml";
			}else
			if(deptParam.getGestor() == null){
				this.departamento = deptParam;
				this.idDepartamentoSuperiorSelecionado = deptParam.getDepartamentoSuperior().getCodigo();
				return "departamento-salvar.xhtml";
			}else {			
				this.departamento = deptParam;
				this.idDepartamentoSuperiorSelecionado = deptParam.getDepartamentoSuperior().getCodigo();
				this.idGestorSelecionado = deptParam.getGestor().getCodigo();
				return "departamento-salvar.xhtml";
			}
			
		

		}
			
		
		
		public String removerDepartamento(Departamento departamento) throws NegocioException{
			this.departamento = departamento;
			this.departamento.setSituacao(Situacao.INATIVO);
			fachada.alterarDepartamento(departamento);
			fachada.removerDepartamento(departamento);
			return "departamento-listar.xhtml";
			
		}
					
	
		public List<Departamento> listarTodosDepartamentos(){
			return Fachada.getInstancia().listarTodosDepartamentos();
		}
		public Departamento  buscarDepartamentoPorId(Departamento departamento){
			return Fachada.getInstancia().buscarDepartamentoPorId(departamento.getCodigo());
		}
}

